home *** CD-ROM | disk | FTP | other *** search
/ PC Elektro 3 / PC-Elektro-3-cd1.bin / KBan 2.0 / KBANSRC.LZH / SRC / PROG / KBANDATA / LINELIST.H < prev    next >
Encoding:
C/C++ Source or Header  |  1997-08-23  |  2.1 KB  |  79 lines

  1. // the declaration of class LINE_LIST
  2. // Copyright (C) 1996, 1997 Kazutaka Hirata <khirata@jove.acs.unt.edu>
  3.  
  4. #ifndef _LINELIST_H_
  5. #define _LINELIST_H_
  6.  
  7. #include <list>
  8.  
  9. #include "../common/slist.h"
  10. #include "../finfo.h"
  11. #include "apttable.h"
  12. #include "file.h"
  13. #include "lineelem.h"
  14.  
  15. class LINE_LIST : public extended_list<LINE_ELEMENT> {
  16. public:
  17.   // constructors
  18.  
  19.   LINE_LIST() : extended_list<LINE_ELEMENT>() {}
  20.   LINE_LIST(const LINE_LIST& src) : extended_list<LINE_ELEMENT>(src) {}
  21.  
  22.   void add(const LINE_LIST& list) { insert(end(), list.begin(), list.end()); }
  23.  
  24.   // max and min
  25.  
  26.   XY get_max() const;
  27.   XY get_min() const;
  28.  
  29.   // block-related
  30.  
  31.   void shift(const XY& ac_dif, LINE_LIST& target) const;
  32.  
  33.   void unselect();
  34.   void select_items_in_block(const XY& ac1, const XY& ac2);
  35.   void collect_selected_items(LINE_LIST& dst) const;
  36.   void remove_selected_items();
  37.  
  38.   // save and load
  39.  
  40.   int           save(FILE_NEW& fp) const;
  41. private:
  42.   typedef void (LINE_ELEMENT::*LOAD_FUNC)(const char *str);
  43.   class LOAD_FUNC_INFO {
  44.   public:
  45.     uint      version;
  46.     LOAD_FUNC func;
  47.     uint operator()() const { return version; }
  48.   };
  49.   static LOAD_FUNC_INFO load_func_table[];
  50.   uint          load_get_version(FILE_NEW& fp) const;
  51.   LOAD_FUNC     get_load_func(uint version) const;
  52. public:
  53.   int           load_primitive_170(FILE_NEW& fp);
  54.   int           load_component_170(FILE_NEW& fp);
  55.   int           load(FILE_NEW& fp);
  56.  
  57.   // purge
  58.  
  59. private:
  60.   int           purge_vertical_lines(LINE_ELEMENT& line);
  61.   int           purge_holizontal_lines(LINE_ELEMENT& line);
  62.   int           purge_slash_lines(LINE_ELEMENT& line);
  63.   int           purge_backslash_lines(LINE_ELEMENT& line);
  64. public:
  65.   int           purge_lines();
  66.  
  67.   // miscellaneous
  68.  
  69.   bool          is_there_nearest_point(XYT ac_min, const XY& ac) const;
  70.   XY            search_nearest_point(XYT ac_min, const XY& ac) const;
  71.   void          collect_aperture(APT_TABLE& apt_table) const;
  72.  
  73.   LINE_ELEMENT* search(XYT eps, const XY& ac);
  74.  
  75.   void          rotate_90();
  76. };
  77.  
  78. #endif /* _LINELIST_H_ */
  79.